package com.example.stuwork.controller;

import com.example.stuwork.common.Result;
import com.example.stuwork.pojo.Class;
import com.example.stuwork.service.ClassService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 班级管理控制器
 */
@RestController
@RequestMapping("/class")
public class ClassController {

    @Autowired
    private ClassService classService;

    /**
     * 获取所有班级
     *
     * @return 班级列表
     */
    @GetMapping
    public Result<List<Class>> getAllClasses() {
        List<Class> classes = classService.findAll();
        return Result.success("获取班级列表成功", classes);
    }

    /**
     * 根据班级ID获取班级信息
     *
     * @param classId 班级ID
     * @return 班级信息
     */
    @GetMapping("/{classId}")
    public Result<Class> getClassById(@PathVariable Long classId) {
        Class clazz = classService.getById(classId);
        if (clazz != null) {
            return Result.success("获取班级信息成功", clazz);
        } else {
            return Result.error("班级不存在");
        }
    }

    /**
     * 根据院系编号获取班级列表
     *
     * @param deptNumber 院系编号
     * @return 班级列表
     */
    @GetMapping("/department/{deptNumber}")
    public Result<List<Class>> getClassesByDepartment(@PathVariable String deptNumber) {
        List<Class> classes = classService.findByDeptNumber(deptNumber);
        return Result.success("获取院系班级列表成功", classes);
    }

    /**
     * 添加班级
     *
     * @param clazz 班级信息
     * @return 添加结果
     */
    @PostMapping
    public Result<Class> addClass(@RequestBody Class clazz) {
        // 参数校验
        if (clazz == null) {
            return Result.error("班级信息不能为空");
        }
        
        if (clazz.getDeptNumber() == null || clazz.getDeptNumber().trim().isEmpty()) {
            return Result.error("院系编号不能为空");
        }
        
        if (clazz.getGrade() == null || clazz.getGrade().trim().isEmpty()) {
            return Result.error("年级不能为空");
        }
        
        if (clazz.getMajorCode() == null || clazz.getMajorCode().trim().isEmpty()) {
            return Result.error("专业代码不能为空");
        }
        
        if (clazz.getMajorName() == null || clazz.getMajorName().trim().isEmpty()) {
            return Result.error("专业名称不能为空");
        }
        
        if (clazz.getClassNumber() == null || clazz.getClassNumber().trim().isEmpty()) {
            return Result.error("班级号不能为空");
        }

        // 检查是否已存在
        if (classService.existsClass(clazz.getDeptNumber(), clazz.getGrade(), 
                                    clazz.getMajorCode(), clazz.getClassNumber())) {
            return Result.error("该班级已存在");
        }

        boolean success = classService.addClass(clazz);
        if (success) {
            // 获取新添加的班级信息
            List<Class> classes = classService.findByDeptNumber(clazz.getDeptNumber());
            for (Class c : classes) {
                if (c.getGrade().equals(clazz.getGrade()) && 
                    c.getMajorCode().equals(clazz.getMajorCode()) && 
                    c.getClassNumber().equals(clazz.getClassNumber())) {
                    return Result.success("添加班级成功", c);
                }
            }
            return Result.success("添加班级成功", null);
        } else {
            return Result.error("添加班级失败");
        }
    }

    /**
     * 更新班级信息
     *
     * @param classId 班级ID
     * @param clazz   班级信息
     * @return 更新结果
     */
    @PutMapping("/{classId}")
    public Result<Class> updateClass(@PathVariable Long classId, @RequestBody Class clazz) {
        // 参数校验
        if (clazz == null) {
            return Result.error("班级信息不能为空");
        }

        // 确保路径中的ID与请求体一致
        clazz.setClassId(classId);

        // 检查班级是否存在
        Class existingClass = classService.getById(classId);
        if (existingClass == null) {
            return Result.error("班级不存在");
        }

        boolean success = classService.updateClass(clazz);
        if (success) {
            Class updatedClass = classService.getById(classId);
            return Result.success("更新班级成功", updatedClass);
        } else {
            return Result.error("更新班级失败");
        }
    }

    /**
     * 删除班级
     *
     * @param classId 班级ID
     * @return 删除结果
     */
    @DeleteMapping("/{classId}")
    public Result<Boolean> deleteClass(@PathVariable Long classId) {
        // 检查班级是否存在
        Class existingClass = classService.getById(classId);
        if (existingClass == null) {
            return Result.error("班级不存在");
        }

        boolean success = classService.deleteClass(classId);
        if (success) {
            return Result.success("删除班级成功", true);
        } else {
            return Result.error("删除班级失败");
        }
    }

    /**
     * 搜索班级
     *
     * @param keyword 关键字
     * @return 班级列表
     */
    @GetMapping("/search")
    public Result<List<Class>> searchClasses(@RequestParam(required = false) String keyword) {
        List<Class> classes = classService.search(keyword);
        return Result.success("搜索班级成功", classes);
    }
} 